/*
 * @Description: 函数的本质
 * @Author: zzj
 * @Date: 2021-09-10 08:48:43
 * @LastEditors: zzj
 * @LastEditTime: 2021-09-10 16:41:46
 */

function Dog(){
    console.log("我是狗妈妈");
  }
  var d1=new Dog();
  var d2=new Dog();
  d1.name="小白狗";
  d2.age=12;
  console.log(d1,d2);

  //面向对象设计思想
function Person(name,age){
    this.name=name;
    this.age=age;
  }
  var p1=new Person("zs",12);//构造函数的使用，p1对象
  //内存关系：
  console.log(p1.__proto__,Person.prototype);//父亲
  console.log(p1.__proto__.constructor);//母亲
  console.log(p1.__proto__.__proto__.constructor);//奶奶
  console.log(Person);//函数名，函数的引用，函数名指向函数 typeof:function
  console.log(Person.prototype);//每一个函数都有一个原型对象 typeof:object
  console.log(Person.prototype.constructor==Person);//每一个原型对象的constructor指向函数本身
  console.log(Person.prototype == p1.__proto__)
  //创建对象过程中属性name的所有者
  console.log('name' in p1);//true
  console.log(p1.hasOwnProperty('name'));//true
  console.log(Person.prototype.hasOwnProperty('name'));//false
  //静态成员、实例成员的新建与使用
  Person.dog="dog";
  Person.work=function(){
    console.log(this.name+' work '+this.age)
  }
  Person.prototype.cat="cat";
  Person.prototype.say=function(){
    console.log(this.name+' say '+this.age)
  }
  console.log(Person);
  console.log(Person.prototype);
  console.log(Person.dog,p1.cat);
  Person.work();//Person work undefined
  p1.say();//zs say 12
  //p1.work();	error!
  //Person.say();	error!
  var p2=new Person('王五',22);
  p2.say();
  Person.work();